/**
 * 按键检测功能
 * PB13 -> KEY1
 * PB14 -> KEY2
 * PB15 -> KEY3
 */

#include <gd32e23x_rcu.h>
#include <systick.h>

// 主函数：
int main(void)
{

    // 初始化 systick
    systick_config();

    // 使能GPIOC 和 GPIOB 端口时钟, 注意这里不能写成     rcu_periph_clock_enable(RCU_GPIOC ｜ RCU_GPIOB);
    rcu_periph_clock_enable(RCU_GPIOC);
    rcu_periph_clock_enable(RCU_GPIOB);
    // 配置GPIOC 为输出模式用于点亮LED灯
    gpio_mode_set(GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_14 | GPIO_PIN_15);
    // 配置GPIOC 为推挽输出，速度为50MH
    gpio_output_options_set(GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_14 | GPIO_PIN_15);
    // 配置GPIOB 为输入模式, 且设置为引脚上拉，保证按键在没有按下的时候为高电平
    gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);
    // 设置GPIOC_13输出高电平
    gpio_bit_set(GPIOC, GPIO_PIN_14 | GPIO_PIN_15);

    while (1)
    {
        if (gpio_input_bit_get(GPIOB, GPIO_PIN_13) == RESET)
        {
            // KEY1 按下：
            delay_1ms(10);
            if (gpio_input_bit_get(GPIOB, GPIO_PIN_13) == RESET)
            {
                while (gpio_input_bit_get(GPIOB, GPIO_PIN_13) == RESET); // 等待按键松开
                gpio_bit_reset(GPIOC, GPIO_PIN_14 | GPIO_PIN_15);
            }
        }

        if (gpio_input_bit_get(GPIOB, GPIO_PIN_14) == RESET)
        {
            // KEY1 按下：
            delay_1ms(10);
            if (gpio_input_bit_get(GPIOB, GPIO_PIN_14) == RESET)
            {
                while (gpio_input_bit_get(GPIOB, GPIO_PIN_14) == RESET); // 等待按键松开
                gpio_bit_set(GPIOC, GPIO_PIN_14 | GPIO_PIN_15);
            }
        }
    }
}
